const path = require("path");

module.exports = ({ isDev, isPro, inputRootDir, outputRootDir, pkgRootDir }) => {
  /** @type {import('webpack').Configuration} */
  return {
    mode: isPro ? "production" : "development", // 开发模式
    devtool: isPro ? false : "source-map", // 生成调试视图
    entry: {
      app: path.resolve(__dirname, inputRootDir, "index.tsx"), // 页面入口
    },
    output: {
      path: path.resolve(__dirname, outputRootDir), // 输出目录
      filename: "[name].[contenthash:6].js", // 输出主文件名
      chunkFilename: "[name].[contenthash:6].js", // 输出代码块文件名
      clean: true, // 输出之前清空目录
    },
    resolve: {
      extensions: [".tsx", ".ts", ".js", ".jsx", ".json"], // 如果导入文件没有后缀 会按照这个后缀查找
      alias: {
        "@": path.resolve(__dirname, pkgRootDir), // 根目录别名
      },
      fallback: {
        crypto: false, // 代码使用了加密模块 不使用node原生的 使用node_modules中安装的
        querystring: false,
      },
    },
    cache: {
      type: "filesystem", // 使用文件的方式缓存
    },
    stats: "errors-only",
    performance: {
      hints: false, // 不显示代码超出体积警告
    },
    optimization: {
      splitChunks: {
        // 代码分割
        chunks: "all",
        cacheGroups: {
          defaultVendors: {
            test: /[\\/]node_modules[\\/]/,
            priority: -10,
            reuseExistingChunk: true,
          },
          default: {
            minChunks: 2,
            priority: -20,
            reuseExistingChunk: true,
          },
        },
      },
    },
  };
};
